home *** CD-ROM | disk | FTP | other *** search
/ Power Programmierung 2 / Power-Programmierung CD 2 (Tewi)(1994).iso / gnu / gnulib / sipp / sphigs / src / src.arj / SPH_MODX.C < prev    next >
Encoding:
C/C++ Source or Header  |  1993-10-12  |  3.9 KB  |  141 lines

  1. #ifndef lint
  2. static char Version[]=
  3.    "$Id: sph_modxform.c,v 1.4 1993/03/09 02:00:54 crb Exp $";
  4. #endif
  5.  
  6. /* -------------------------------------------------------------------------
  7.  * sph_modxform.c
  8.  *
  9.  *      Transformation matrices.
  10.  * ------------------------------------------------------------------------- */
  11.  
  12. #include "HEADERS.h"
  13. #include "sphigslocal.h"
  14.       
  15. static double degtoradfactor = 0.01745329252;
  16.  
  17.  
  18. /* ---------------------------- Public Routines ---------------------------- */
  19.  
  20. /* -------------------------------------------------------------------------
  21.  * DESCR   :    Constructs a scale matrix.
  22.  * ------------------------------------------------------------------------- */
  23. void
  24. SPH_scale(
  25.    double scaleX,
  26.    double scaleY,
  27.    double scaleZ,
  28.    matrix result)
  29. {
  30.    MAT3hvec scalevec;
  31.    
  32.    scalevec[0] = scaleX;
  33.    scalevec[1] = scaleY;
  34.    scalevec[2] = scaleZ;
  35.    MAT3scale (result, scalevec);
  36. }
  37.  
  38.  
  39. /* -------------------------------------------------------------------------
  40.  * DESCR   :    Constructs a translate matrix.
  41.  * ------------------------------------------------------------------------- */
  42. void 
  43. SPH_translate(
  44.    double translateX,
  45.    double translateY,
  46.    double translateZ,
  47.    matrix result )
  48. {
  49.    MAT3hvec translatevec;
  50.    
  51.    translatevec[0] = translateX;
  52.    translatevec[1] = translateY;
  53.    translatevec[2] = translateZ;
  54.    MAT3translate (result, translatevec);
  55. }
  56.  
  57.    
  58. /* -------------------------------------------------------------------------
  59.  * DESCR   :    Constructs a matrix for rotation around the X axis.
  60.  * ------------------------------------------------------------------------- */
  61. void 
  62. SPH_rotateX(
  63.    double angle,
  64.    matrix result) 
  65. {
  66.    static MAT3hvec rotaxisvec = {0.0, 0.0, 0.0};
  67.  
  68.    rotaxisvec[0] = 1;
  69.    MAT3rotate (result, rotaxisvec, angle*degtoradfactor);
  70.    rotaxisvec[0] = 0;
  71. }
  72.  
  73. /* -------------------------------------------------------------------------
  74.  * DESCR   :    Constructs a matrix for rotation around the Y axis.
  75.  * ------------------------------------------------------------------------- */
  76. void 
  77. SPH_rotateY(
  78.    double angle,
  79.    matrix result) 
  80. {
  81.    static MAT3hvec rotaxisvec = {0.0, 0.0, 0.0};
  82.    
  83.    rotaxisvec[1] = 1;
  84.    MAT3rotate (result, rotaxisvec, angle*degtoradfactor);
  85.    rotaxisvec[1] = 0;
  86. }
  87.  
  88. /* -------------------------------------------------------------------------
  89.  * DESCR   :    Constructs a matrix for rotation around the Z axis.
  90.  * ------------------------------------------------------------------------- */
  91. void 
  92. SPH_rotateZ(
  93.    double angle,
  94.    matrix result) 
  95. {
  96.    static MAT3hvec rotaxisvec = {0.0, 0.0, 0.0};
  97.    
  98.    rotaxisvec[2] = 1;
  99.    MAT3rotate (result, rotaxisvec, angle*degtoradfactor);
  100.    rotaxisvec[2] = 0;
  101. }
  102.  
  103.  
  104. /* -------------------------------------------------------------------------
  105.  * DESCR   :    Provided for backward compatibility, since the vector package
  106.  *         once used by SPHIGS did matrix mults and transforms via row
  107.  *         vectors.  This function emulates that behavior.
  108.  * ------------------------------------------------------------------------- */
  109. void 
  110. SPH_oldComposeMatrix(
  111.    matrix mat1,
  112.    matrix mat2,
  113.    matrix result) 
  114. {
  115.    MAT3mult (result, mat2, mat1);
  116. }
  117.  
  118. /* -------------------------------------------------------------------------
  119.  * DESCR   :    Provided for linkage compatibility.  There should be no
  120.  *        prototype for this function in sphigs.h.
  121.  * ------------------------------------------------------------------------- */
  122. #undef SPH_compose
  123. void SPH_compose(matrix, matrix, matrix);    /* for THINK_C proto-checking */
  124. void 
  125. SPH_compose(matrix p1, matrix p2, matrix p3) 
  126. {
  127.    SPH_oldComposeMatrix (p1, p2, p3);
  128. }
  129.  
  130. /* -------------------------------------------------------------------------
  131.  * DESCR   :    Simple matrix multiplication.
  132.  * ------------------------------------------------------------------------- */
  133. void 
  134. SPH_composeMatrix(
  135.    matrix mat1,
  136.    matrix mat2,
  137.    matrix result) 
  138. {
  139.    MAT3mult (result, mat1, mat2);
  140. }
  141.